﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
//编写函数(不允许创建临时变量)，求字符串的长度。
//int my_strlen(char* str)
//{
//	int len = 0;
//	while (*str != '\0')
//	{
//		len++;
//		str++;
//	}
//	return len;
//	
//}
//编写函数(不允许创建临时变量)，求字符串的长度。
//int my_strlen(char* str)
//{
//	if (*str != '\0')
//	{
//		return 1 + my_strlen(str + 1);
//		return 1 + mystrlen(++str);这样不如直接加一，会改变原来函数的str
//	}
//	else
//	{
//		return 0;
//	}
//
//}
//int main()
//{
//	char arr[] = "abcdefg0";
//	printf("%d ", my_strlen(arr));
//	return 0;
//
//}
//斐波那契数
//不适合用递归求解
//int fib(int n)
//{
//	if (n <= 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return fib(n - 1) + fib(n - 2);
//	}
//
//}
//int main()
//{
//	printf("%d ", fib(10));
//	return 0;
//}

//int fib(int n)
//{
//	int a = 1;
//	int b = 1;
//	int c = 1;
//	while (n > 2)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		n--;
//	}
//	return c;
//
//}
//int main()
//{
//	printf("%d ", fib(30));
//	return 0;
//}

//1-1/2+1/3-1/4+1/5……-1/100
//int main()
//{
//	int i = 1;
//	double sum = 0;
//	int flag = 1;
//	for (i = 1; i <= 10; i++)
//	{
//		sum += flag*1.0 / i;
//		flag = -flag;
//
//	}
//	printf("%f", sum);
//}


//编写一个函数实现n的k次方，使用递归实现。
//int fun(int n, int k)
//{
//	if (1 == k)
//	{
//		return n;
//	}
//	else
//	{
//		return n * fun(n, k - 1);
//	}
//
//}
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d ", &n);
//	scanf("%d ", &k);
//	printf("%d ", fun(n, k));
//	return 0;
//}

//写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和
//
//例如，调用DigitSum(1729)，则应该返回1 + 7 + 2 + 9，它的和是19
//
//输入：1729，输出：19
//int DigitSum(int n)
//{
//	if (n > 9)
//	{
//		return DigitSum(n / 10) + n % 10;
//	}
//	else
//		return n;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	printf("%d ", DigitSum(n));
//	return 0;
//}
//
//编写一个函数 reverse_string(char* string)（递归实现）
//实现：将参数字符串中的字符反向排列，不是逆序打印。
//要求：不能使用C函数库中的字符串操作函数。
//比如 :
//char arr[] = "abcdef";
//逆序之后数组的内容变成：fedcba
//
//void reverse_string(char* string)
//{
//	char* end = string;
//	while (*end != '\0')
//	{
//		end++;	
//	}
//	end--;
//
//	if (end - string >2)
//	{
//		int tmp = 0;
//		tmp = *string;
//		*string = *end;
//		*end = tmp;
//
//		char str[1024] = "\0";
//		int i = 0;
//		string++;
//		end--;
//		while (end - string >= 0)
//		{
//			str[i] = *string;
//			string++;
//			i++;
//		}//无法达到目的
//		reverse_string(str);
//	}
//
//	else 
//	{
//		int tmp = 0;
//		tmp = *string;
//		*string = *end;
//		*end = tmp;
//		
//	}
//	
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_string(arr);
//	printf("%s", arr);
//
//	
//	return 0;
//}



/*int* a = "abcdefghijklmnopqrstuvwxyz";
	for (int i = 0; i < 2; i++)
	{
		printf("%c", *a);
		a++;
	}*/
//递归和非递归分别实现strlen
//int strlen1(char* arr)
//{
//	int len = 0;
//	while (*arr != 0)
//	{
//		len++;
//		arr++;
//	}
//	return len;
//
//}
//int strlen2(char* arr)
//{
//	if (*arr != 0)
//	{
//		return 1 + strlen2(arr + 1);
//	}
//	else
//	{
//		return 0;
//	}
//}
//
//
//int main()
//{
//	char arr[] = "abcdef";
//	printf("%d ", strlen1(arr));
//	printf("%d ", strlen2(arr));
//}

//int fib1(int n)
//{
//	if (1 == n || 2 == n)
//	{
//		return 1;
//	}
//	else
//	{
//		return fib1(n - 1) + fib1(n - 2);
//	}
//}
////1 1 2 3 5 8 13
//int fib2(int n)
//{
//	int a = 1; 
//	int b = 1;
//	int c = 1;
//	while (n > 2)
//	{
//		c = a + b;
//		a = b; 
//		b = c;
//		n--;
//	}
//	return c;
//	
//}
//int main()
//{
//	int n = 0;
//	//递归
//	scanf("%d", &n);
//	printf("%d\n", fib1(n));
//	scanf("%d", &n);
//	printf("%d\n", fib1(n));
//	scanf("%d", &n);
//	printf("%d\n", fib1(n));
//	//非递归
//	scanf("%d", &n);
//	printf("%d\n", fib2(n));
//	scanf("%d", &n);
//	printf("%d\n", fib2(n));
//	scanf("%d", &n);
//	printf("%d\n", fib2(n));
//}



//int main()
//{
//    int n = 0;
//    int i = 0;
//    int sum = 0;
//    scanf("%d", &n);
//    for (i = 0; i < n; i++)
//    {
//        scanf("%d", &n);
//        sum += n;
//    }
//    printf("%d", sum);
//    return 0;
//}

//逆序之后数组的内容变成：fedcba

void reverse_string(char* string)
{
	char* end = string;
	while (*end != '\0')
	{
		end++;
	}
	end--;

	if (end - string > 2)
	{
		int tmp = 0;
		tmp = *string;
		*string = *end;
		*end = tmp;

		*(end--) = 0;
		reverse_string(string + 1);
		*(end--) = tmp;

	}

	else
	{
		int tmp = 0;
		tmp = *string;
		*string = *end;
		*end = tmp;

	}

}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);


	return 0;
}
